/*
 * CDynamicUnit.h
 *
 *  Created on: 09.12.2011
 *      Author: Kirill Blinov
 *      Copyright: LGPL
 */

#ifndef CDYNAMICUNIT_H_
#define CDYNAMICUNIT_H_

#include "IUnit.h"

class CDynamicUnit: public IUnit
{
protected:
	CDynamicUnit( GAME_OBJECT* VisualisationInfo );
	CDynamicUnit( const CDynamicUnit& Base ) : IUnit( Base ){};
	virtual ~CDynamicUnit(){};
public:
	void PlayAnimation( IAnimationPlayer* ){};
	void UpdatePhisicParams( CPhisicEngine* ){};
	void SubmithState(){};
	void Rotate( UINT Axis, float Angle ){};
	void Axeleration( float Axeleration ){};
};

class CPaperJet: public CDynamicUnit
{
protected:
	CPaperJet( GAME_OBJECT* VisualisationInfo );
	CPaperJet( const CPaperJet& Base ) : CDynamicUnit( Base ){};
	virtual ~CPaperJet();
public:
};

class CHeavyJet: public CPaperJet
{
friend class UnitFabric;
friend class CTemplateCollection;
private:
	CHeavyJet( GAME_OBJECT* VisualisationInfo );
	CHeavyJet( const CHeavyJet& Base ) : CPaperJet( Base ){};
	virtual ~CHeavyJet();
protected:
	void MakeClone( CTemplateCollection* Collection ) const;
public:

};

class CMediumJet: public CPaperJet
{
friend class UnitFabric;
friend class CTemplateCollection;
private:
	CMediumJet( GAME_OBJECT* VisualisationInfo );
	CMediumJet( const CMediumJet& Base ) : CPaperJet( Base ){};
	virtual ~CMediumJet();
protected:
	void MakeClone( CTemplateCollection* Collection ) const;
public:
};

class CLightJet: public CPaperJet
{
friend class UnitFabric;
friend class CTemplateCollection;
private:
	CLightJet( GAME_OBJECT* VisualisationInfo );
	CLightJet( const CLightJet& Base ) : CPaperJet( Base ){};
	virtual ~CLightJet();
protected:
	void MakeClone( CTemplateCollection* Collection ) const;
public:
};

class CProjectile: public CDynamicUnit
{
protected:
	CProjectile( GAME_OBJECT* VisualisationInfo );
	CProjectile( const CProjectile& Base ) : CDynamicUnit( Base ){};
	virtual ~CProjectile();
public:

};

class CRacket: public CProjectile
{
friend class UnitFabric;
friend class CTemplateCollection;
private:
	CRacket( GAME_OBJECT* VisualisationInfo );
	CRacket( const CRacket& Base ) : CProjectile( Base ){};
	virtual ~CRacket();
protected:
	void MakeClone( CTemplateCollection* Collection ) const;
public:

};

class CMilk: public CProjectile
{
friend class UnitFabric;
friend class CTemplateCollection;
private:
	CMilk( GAME_OBJECT* VisualisationInfo );
	CMilk( const CMilk& Base ) : CProjectile( Base ){};
	virtual ~CMilk();
protected:
	void MakeClone( CTemplateCollection* Collection ) const;
public:

};

class CBullet: public CProjectile
{
friend class UnitFabric;
friend class CTemplateCollection;
private:
	CBullet( GAME_OBJECT* VisualisationInfo );
	CBullet( const CBullet& Base ) : CProjectile( Base ){};
	virtual ~CBullet();
protected:
	void MakeClone( CTemplateCollection* Collection ) const;
public:
};

#endif /* CDYNAMICUNIT_H_ */

